package com.arges.web.service;

import java.util.Collection;
import java.util.List;

import org.hibernate.criterion.Criterion;

import com.arges.web.common.QueryColumn;
import com.arges.web.domain.tableutil.DbTableForDataDelete;

/**
 * service公用类接口
 * 
 * @author arges
 * 
 * @param <Pojo>
 * @param <PK>
 */
public interface GenericManage<Pojo, Bean>
{
	/**
	 * 保存某个对象
	 * 
	 * @param object
	 */
	public void save(Pojo object);

	/**
	 * 删除某个对象
	 * 
	 * @param object
	 */
	public void delete(Pojo object);

	/**
	 * 根据id删除某个对象
	 * 
	 * @param object
	 */
	public void delete(Long id);

	/**
	 * 保存或者更新某个对象
	 * 
	 * @param object
	 */
	public void saveOrUpdate(Pojo object);

	/**
	 * 更新某个对象
	 * 
	 * @param object
	 */
	public void update(Pojo object);

	/**
	 * 根据id查找某个对象
	 * 
	 * @param 主键id
	 * @return T
	 */
	public Pojo get(Long id);

	/**
	 * 查找所有对象
	 */
	public List<Pojo> findAll();

	/**
	 * 批量保存数据
	 * 
	 * @param collection 数据集合
	 */
	public void batchSave(Collection<? extends Object> collection);

	/**
	 * 批量保存或者更新数据
	 * 
	 * @param collection 数据集合
	 */
	public void batchSaveOrUpdate(Collection<? extends Object> collection);

	public void batchDelete(List<DbTableForDataDelete> dbTables);

	// List<DictionaryBean> getDictionaryList(String dictionaryType, String param1, String param2);
	//
	// List<DictionaryBean> getDictionaryList(String dictionaryType, List<Criterion> conditions);

	/**
	 * 根据条件查询并将其转换为bean list, 如果beanClass为null，则不转化
	 *
	 * @param conditions 查询条件
	 * @param beanClass 如果beanClass为null，则不转化
	 * @param pojoClass
	 * @return
	 * @since Ver 3.0
	 */
	@SuppressWarnings("unchecked")
	public List findByCriterions(List<Criterion> conditions, Class beanClass, Class pojoClass);

	/**
	 * 根据条件查询并将其转换为bean list, 如果beanClass为null，则不转化
	 *
	 * @param conditions 查询条件
	 * @param beanClass 如果beanClass为null，则不转化
	 * @param pojoClass
	 * @param queryCols 要查询的属性，即只返回这些属性
	 * @return
	 * @since Ver 3.0
	 */
	@SuppressWarnings("unchecked")
	public List findByCriterions(List<Criterion> conditions, Class beanClass, Class pojoClass,
			List<QueryColumn> queryCols);

	/**
	 * 根据条件查询并将其转换为bean list, 如果beanClass为null，则不转化
	 *
	 * @param conditions 查询条件
	 * @param beanClass 如果beanClass为null，则不转化
	 * @param pojoClass
	 * @param queryCols 要查询的属性，即只返回这些属性
	 * @param toObj 是否将查询出来的属性转化为beanClass的对象，该属性只有在queryCols存在的时候才有效
	 * @return
	 * @since Ver 3.0
	 */
	@SuppressWarnings("unchecked")
	public List findByCriterions(List<Criterion> conditions, Class beanClass, Class pojoClass,
			List<QueryColumn> queryCols, boolean toObj);

	public List findBySingleCondition(Criterion condition, Class beanClass, Class pojoClass);

	@SuppressWarnings("unchecked")
	public List findBySingleCondition(Criterion condition, Class beanClass, Class pojoClass, List<QueryColumn> queryCols);

	@SuppressWarnings("unchecked")
	public List findBySingleCondition(Criterion condition, Class beanClass, Class pojoClass,
			List<QueryColumn> queryCols, boolean toObj);
}
